package com.doitedu.day05.test

import scala.io.Source
import scala.reflect.ClassTag.Nothing
import scala.runtime.Nothing$

/**
 * @Date 22.6.25
 * @Created by HANGGE
 * @Description
 * uid003,2022-06-25,pageView,page05
 * uid005,2022-06-25,pageView,page06
 * 统计每天  日活用户数  页面被访问次数
 */
object Test01_PVUV {


  def main(args: Array[String]): Unit = {
    // 1 加载数据
    val lines = Source.fromFile("E://data/puuv.csv").getLines()
    // 2 获取行数据  解析  将每行数据封装成case  class / 元组
    val data: Iterator[LogBean] = lines.map(line => {
      var bean: LogBean = null

      try {
        val arr = line.split(",")
        //将每行数据封装成case  class
        bean = LogBean(arr(0), arr(1), arr(2), arr(3))
        bean
      } catch {
        // try中的代码出现异常 被catch 执行catch中的代码
        case e: Exception => bean
      }
    })
    // 过滤掉脏数据
    val logs = data.filter(logBean => logBean != null).toList
    // 3 分组聚合
    // 将数据按照日期分组
    val grouped = logs.groupBy(_.date)
    val resData = grouped.flatMap(tp => {
      // 日期
      val date = tp._1
      val ls = tp._2
      // 所有的uid组成的集合
      val distinct = ls.map(_.uid).toList.distinct
      val pages = ls.map(_.pageUrl).toList

      val pv = pages.groupBy(e => e).map(tp => {
        (tp._1, tp._2.size)
      }).toList

      // 日期 , uv ,
      val res = pv.map(tp => {
        (date, distinct.size, tp)
      })
      // list集合
      res
    })
    resData.foreach(println)

  }

}
